import { defineStore } from "pinia";

interface IStateRes {
  menus: Array<IMneuItem>;
}

export const useMenusStroe = defineStore("menus", {
  state: (): IStateRes => {
    return {
      menus: [], // 用户 的 权限列表 ，一旦登陆了 就更新这里的数据
    };
  },
  getters: {
    sortedMenus: (state) => {
      let menus = [...state.menus]; // 深拷贝
      // console.log(menus);
      
      // 处理数组
      // 1. sort 把所有的一级菜单排在前面 , 二级菜单放在数组后面
      // 2. 进行排序之后的数组 循环遍历，判断数组项 parentId 是0 ， 增加一个字段 children,用来存放子菜单
      // 3. 判断数组项的parentID 是否不等于0 ，如果不等于0，说明有父级, 就要根据parentId去找父级，找到父级之后，将其push 进父级的 children 里面
      // 4. 对新数组进行过滤 ，只保留一级菜单，二级菜单就不需要了，因为已经push到了一级菜单的children 内
      // 5. 过滤 ，用id进行排序。
      menus.sort((a, b) => {
        return a.parentId - b.parentId;
      });
      menus.forEach((item) => {
        // hidden === 0 说明 不隐藏
        if (item.hidden === 0) {
          if (item.parentId === 0) {
            item.children = [];
          }
          const index = menus.findIndex((el) => {
            return el.id === item.parentId;
          });
          // console.log(index);
          
          if (index > -1) {
            // console.log(item);
            
            menus[index].children?.push(item);
          }
          // console.log(menus);
          
        }
      });
      // console.log(menus);
      
      menus = menus.filter((item) => {
        return item.parentId === 0;
      });
      menus.sort((a, b) => {
        return a.id - b.id;
      });

      return menus;
    },
  },
  actions: {
    updateMenus(menu: IMneuItem[]) {
      this.menus = menu;
    },
  },
});
